/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

资源编排
资源编排

OpenAPI spec version: v1
Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/


#ifndef JdroClient_h
#define JdroClient_h


#import <JDCloudOCSDKCore/JDCloudOCSDKCore.h>
#import <JDCloudOCSDKJdro/JdroApiModel.h>

@interface JdroClient : NSObject<JDCloudClient>{
    @private
    NSString* _userAgent;
    NSString* _serviceName;
    NSString* _version;
    }

    @property (strong,readonly,nonatomic) NSString* userAgent;

    @property (strong,readonly,nonatomic) NSString* serviceName;

    @property (strong,readonly,nonatomic) NSString* version;

    @property (strong,nonatomic) NSString* contentType;

    @property (strong,nonatomic) Credential* credential;

    @property (strong,nonatomic) SDKEnvironment* sdkEnvironment;

    @property (strong,nonatomic) NSMutableDictionary* customHeader;

    @property  (strong,nonatomic) NSString* httpRequestProtocol;

    -(void) addCustomerHeaderWithKey:(NSString*) key
    value:(NSString*) value;

    -(id)initWithGlobalConfig;

    -(id)initWithCredential:(Credential*)credential
    sdkEnvironment:(SDKEnvironment*)sdkEnvironment;
    -(id)initWithCredential:(Credential*)credential;
    /**
    describeStacks sync request
    @param describeStacksRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeStacksResponse` the request response data model
    */
    -(NSDictionary*) describeStacksSyncWithRequest:(JdroDescribeStacksRequest*) describeStacksRequest;

    -(void)describeStacksAsyncWithRequest:(JdroDescribeStacksRequest*) describeStacksRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeStacksResponse* _Nullable describeStacksResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeStackEvents sync request
    @param describeStackEventsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeStackEventsResponse` the request response data model
    */
    -(NSDictionary*) describeStackEventsSyncWithRequest:(JdroDescribeStackEventsRequest*) describeStackEventsRequest;

    -(void)describeStackEventsAsyncWithRequest:(JdroDescribeStackEventsRequest*) describeStackEventsRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeStackEventsResponse* _Nullable describeStackEventsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeStackResources sync request
    @param describeStackResourcesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeStackResourcesResponse` the request response data model
    */
    -(NSDictionary*) describeStackResourcesSyncWithRequest:(JdroDescribeStackResourcesRequest*) describeStackResourcesRequest;

    -(void)describeStackResourcesAsyncWithRequest:(JdroDescribeStackResourcesRequest*) describeStackResourcesRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeStackResourcesResponse* _Nullable describeStackResourcesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createChangeSet sync request
    @param createChangeSetRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createChangeSetResponse` the request response data model
    */
    -(NSDictionary*) createChangeSetSyncWithRequest:(JdroCreateChangeSetRequest*) createChangeSetRequest;

    -(void)createChangeSetAsyncWithRequest:(JdroCreateChangeSetRequest*) createChangeSetRequest
    completionHandler:(void(^)(int statusCode,JdroCreateChangeSetResponse* _Nullable createChangeSetResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createStack sync request
    @param createStackRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createStackResponse` the request response data model
    */
    -(NSDictionary*) createStackSyncWithRequest:(JdroCreateStackRequest*) createStackRequest;

    -(void)createStackAsyncWithRequest:(JdroCreateStackRequest*) createStackRequest
    completionHandler:(void(^)(int statusCode,JdroCreateStackResponse* _Nullable createStackResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeStack sync request
    @param describeStackRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeStackResponse` the request response data model
    */
    -(NSDictionary*) describeStackSyncWithRequest:(JdroDescribeStackRequest*) describeStackRequest;

    -(void)describeStackAsyncWithRequest:(JdroDescribeStackRequest*) describeStackRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeStackResponse* _Nullable describeStackResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeStackTemplate sync request
    @param describeStackTemplateRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeStackTemplateResponse` the request response data model
    */
    -(NSDictionary*) describeStackTemplateSyncWithRequest:(JdroDescribeStackTemplateRequest*) describeStackTemplateRequest;

    -(void)describeStackTemplateAsyncWithRequest:(JdroDescribeStackTemplateRequest*) describeStackTemplateRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeStackTemplateResponse* _Nullable describeStackTemplateResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    executeChangeSet sync request
    @param executeChangeSetRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `executeChangeSetResponse` the request response data model
    */
    -(NSDictionary*) executeChangeSetSyncWithRequest:(JdroExecuteChangeSetRequest*) executeChangeSetRequest;

    -(void)executeChangeSetAsyncWithRequest:(JdroExecuteChangeSetRequest*) executeChangeSetRequest
    completionHandler:(void(^)(int statusCode,JdroExecuteChangeSetResponse* _Nullable executeChangeSetResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteStack sync request
    @param deleteStackRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteStackResponse` the request response data model
    */
    -(NSDictionary*) deleteStackSyncWithRequest:(JdroDeleteStackRequest*) deleteStackRequest;

    -(void)deleteStackAsyncWithRequest:(JdroDeleteStackRequest*) deleteStackRequest
    completionHandler:(void(^)(int statusCode,JdroDeleteStackResponse* _Nullable deleteStackResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    validateTemplate sync request
    @param validateTemplateRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `validateTemplateResponse` the request response data model
    */
    -(NSDictionary*) validateTemplateSyncWithRequest:(JdroValidateTemplateRequest*) validateTemplateRequest;

    -(void)validateTemplateAsyncWithRequest:(JdroValidateTemplateRequest*) validateTemplateRequest
    completionHandler:(void(^)(int statusCode,JdroValidateTemplateResponse* _Nullable validateTemplateResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeResourceTypeSpecification sync request
    @param describeResourceTypeSpecificationRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeResourceTypeSpecificationResponse` the request response data model
    */
    -(NSDictionary*) describeResourceTypeSpecificationSyncWithRequest:(JdroDescribeResourceTypeSpecificationRequest*) describeResourceTypeSpecificationRequest;

    -(void)describeResourceTypeSpecificationAsyncWithRequest:(JdroDescribeResourceTypeSpecificationRequest*) describeResourceTypeSpecificationRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeResourceTypeSpecificationResponse* _Nullable describeResourceTypeSpecificationResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeResourceTypeList sync request
    @param describeResourceTypeListRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeResourceTypeListResponse` the request response data model
    */
    -(NSDictionary*) describeResourceTypeListSyncWithRequest:(JdroDescribeResourceTypeListRequest*) describeResourceTypeListRequest;

    -(void)describeResourceTypeListAsyncWithRequest:(JdroDescribeResourceTypeListRequest*) describeResourceTypeListRequest
    completionHandler:(void(^)(int statusCode,JdroDescribeResourceTypeListResponse* _Nullable describeResourceTypeListResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    /**
    jdro common sync request
    @param  jdcloudDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
    */
    -(NSDictionary*) jdroCommonSyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                           url:(NSString*) url
                                        method:(NSString*) method;

    -(void)jdroCommonAsyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                  url:(NSString*) url
                               method:(NSString*) method
                    completionHandler:(void(^)(int statusCode, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    @end


    #endif /* JdroClient_h */
